/**
 * Mock拦截器
 * 用于拦截API请求并返回mock数据
 */

import axios from 'axios'
import { mockScoreList, mockScoreDetail } from './mock-student-score'

// 跟踪拦截器是否已启用
let interceptorEnabled = false

// 保存原始方法引用
const originalAdapter = axios.defaults.adapter

/**
 * 启用mock拦截
 */
export function enableMockInterceptor() {
  // 防止重复启用
  if (interceptorEnabled) {
    return
  }
  
  // 替换axios适配器，这种方式比直接替换request更可靠
  axios.defaults.adapter = function(config) {
    const { url, method, params, data } = config
    
    // 检查是否是我们需要mock的请求
    if (shouldMock(url)) {
      console.log(`[Mock] 拦截请求: ${url}`, params)
      return mockResponse(url, method, params, data)
    }
    
    // 不需要mock的请求正常发送
    return originalAdapter(config)
  }
  
  interceptorEnabled = true
  console.log('[Mock] 拦截器已启用')
}

/**
 * 禁用mock拦截
 */
export function disableMockInterceptor() {
  // 防止重复禁用
  if (!interceptorEnabled) {
    return
  }
  
  // 恢复原始适配器
  axios.defaults.adapter = originalAdapter
  interceptorEnabled = false
  console.log('[Mock] 拦截器已禁用')
}

/**
 * 判断是否应该mock这个请求
 * @param {String} url 请求URL
 * @returns {Boolean} 是否需要mock
 */
function shouldMock(url) {
  // 这里列出需要mock的URL模式
  const mockPatterns = [
    '/student/score/list',
    '/student/score/detail/'
  ]
  
  return mockPatterns.some(pattern => url.includes(pattern))
}

/**
 * 生成mock响应
 * @param {String} url 请求URL
 * @param {String} method 请求方法
 * @param {Object} params 请求参数
 * @param {Object} requestData 请求体数据
 * @returns {Promise} Promise对象
 */
function mockResponse(url, method, params, requestData) {
  // 添加随机延迟 (300-800ms)
  const delay = Math.floor(Math.random() * 501) + 300
  
  return new Promise(resolve => {
    setTimeout(() => {
      let responseData = null
      
      // 根据URL返回不同的mock数据
      if (url.includes('/student/score/list')) {
        responseData = mockScoreList(params)
        console.log(`[Mock] 生成成绩列表数据: ${responseData.list.length}条记录`)
        // 打印完整的mock数据
        console.log('[Mock] 成绩列表数据结构:', JSON.stringify(responseData, null, 2))
      } else if (url.includes('/student/score/detail/')) {
        // 从URL中提取examId
        const examId = extractIdFromUrl(url)
        responseData = mockScoreDetail(examId)
        console.log(`[Mock] 生成成绩详情数据: ID=${examId}`)
        // 打印完整的mock数据
        console.log('[Mock] 成绩详情数据结构:', JSON.stringify(responseData, null, 2))
      }
      
      // 包装成axios响应格式
      const response = {
        data: {
          code: 200,
          message: 'success',
          data: responseData
        },
        status: 200,
        statusText: 'OK',
        headers: {},
        config: {}
      };
      
      resolve(response)
    }, delay)
  })
}

/**
 * 从URL中提取ID
 * @param {String} url 请求URL
 * @returns {Number} 提取的ID
 */
function extractIdFromUrl(url) {
  const parts = url.split('/')
  return parseInt(parts[parts.length - 1])
}

// 默认启用mock拦截器
enableMockInterceptor() 